Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 0:470a92800884
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sun Nov 29 05:55:29 2020 +0000
@@ -0,0 +1,142 @@
+/**************************
+2020/10/09
+編集者:福田哲生
+
+回路が新しくなり、AnalogOutから電圧が出力できるようになった。これを受けて出力場所の変更を行う。
+これに伴いプログラムを一新することにした。
+p18に0~1の出力を行うとそれが0~570Vとして出力できる。
+p14~p17で電圧、周波数を10V/Hzずつ変更するようにした。
+電圧周波数の初期値は570V/100Hz
+
+黄色:電圧10V上昇
+青色:電圧10V下降
+白色:周波数10Hz上昇
+黒色:周波数10Hz下降
+
+2020/11/26
+編集者:福田哲生
+
+先方の要望により、シリアル通信を用いてボタンを押すと現在の
+電圧値・周波数を確認できるようにした。(要Teraterm)
+***************************/
+#include "mbed.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+AnalogOut signal(p18);//AnalogOutピン(1768は18番ピン)
+Timer timer;//カウンタ
+Timer chtimer;//チャタリング用タイマー
+int Freq;//正弦波の周波数
+int Volt;//印加電圧値
+
+//スイッチ用ピンの宣言
+DigitalIn VoltUp(p14);
+DigitalIn VoltDown(p15);
+DigitalIn FreqUp(p16);
+DigitalIn FreqDown(p17);
+
+int swflag = 0;//スイッチ用フラグ
+
+#define MIN_TIME_DIFF 200//チャタリング用待機時間
+
+//LEDの宣言
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+//シリアル通信用の宣言
+Serial pc(USBTX, USBRX);
+
+char vol[12];
+char fre[12];
+
+#define POWER_UP 0xF1
+#define POWER_DOWN 0xF2
+#define FREQ_UP 0xF3
+#define FREQ_DOWN 0xF4
+
+
+int main() {
+ double t=0.0;
+ int timediff = 0;
+ timer.start();
+ chtimer.start();
+ Volt = 570;
+ Freq = 100;
+ while(1) {
+ if(VoltUp.read() == 1){//黄押すと電圧10V増加
+ timediff = chtimer.read_ms();
+ if(timediff > MIN_TIME_DIFF) {
+ Volt = Volt + 10;
+ if(Volt > 570){
+ Volt = 570;
+ }
+ }
+ chtimer.reset();
+ led1 = 1;
+ led2 = 0;
+ led3 = 0;
+ led4 = 0;
+ int n = sprintf(vol,"Voltage:%d\n",Volt);//シリアル通信で送る文字列
+ pc.printf(vol);
+
+ wait(0.5);
+ }
+ if(VoltDown.read() == 1){//青押すと電圧10V減少
+ timediff = chtimer.read_ms();
+ if(timediff > MIN_TIME_DIFF) {
+ Volt = Volt - 10;
+ if(Volt < 0){
+ Volt = 0;
+ }
+ }
+ chtimer.reset();
+ led1 = 0;
+ led2 = 1;
+ led3 = 0;
+ led4 = 0;
+ int n = sprintf(vol,"Voltage:%d\n",Volt);
+ pc.printf(vol);
+ wait(0.5);
+ }
+ if(FreqUp.read() == 1){//白押すと周波数10Hz増加
+ timediff = chtimer.read_ms();
+ if(timediff > MIN_TIME_DIFF) {
+ Freq = Freq + 10;
+ }
+ chtimer.reset();
+ led1 = 0;
+ led2 = 0;
+ led3 = 1;
+ led4 = 0;
+ int n = sprintf(fre,"Frequency:%d\n",Freq);
+ pc.printf(fre);
+ wait(0.5);
+ }
+ if(FreqDown.read() == 1){//黒押すと周波数10Hz減少
+ timediff = chtimer.read_ms();
+ if(timediff > MIN_TIME_DIFF) {
+ Freq = Freq - 10;
+ if(Freq < 0){
+ Freq = 0;
+ }
+ }
+ chtimer.reset();
+ led1 = 0;
+ led2 = 0;
+ led3 = 0;
+ led4 = 1;
+ int n = sprintf(fre,"Frequency:%d\n",Freq);
+ pc.printf(fre);
+ wait(0.5);
+ }
+ //sin波の出力※0~1の値をp18に送るため570で割る
+ t = (double)timer.read_us() * 0.000001;
+ signal = ((0.5 + sin(2.0 * 3.1415926 * Freq * t)/2) * Volt) / 570;
+ led1 = 1;
+ led2 = 1;
+ led3 = 1;
+ led4 = 1;
+ }
+}