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.
main.cpp@0:26508adf6f76, 2020-10-09 (annotated)
- Committer:
- Tetsuki
- Date:
- Fri Oct 09 09:07:35 2020 +0000
- Revision:
- 0:26508adf6f76
- Child:
- 1:3e1c05f8d7e8
Green Switch sinewave
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Tetsuki | 0:26508adf6f76 | 1 | /************************** |
| Tetsuki | 0:26508adf6f76 | 2 | 2020/10/09 |
| Tetsuki | 0:26508adf6f76 | 3 | 編集者:福田哲生 |
| Tetsuki | 0:26508adf6f76 | 4 | |
| Tetsuki | 0:26508adf6f76 | 5 | 回路が新しくなり、AnalogOutから電圧が出力できるようになった。これを受けて出力場所の変更を行う。 |
| Tetsuki | 0:26508adf6f76 | 6 | これに伴いプログラムを一新することにした。 |
| Tetsuki | 0:26508adf6f76 | 7 | p18に0~1の出力を行うとそれが0~570Vとして出力できる。 |
| Tetsuki | 0:26508adf6f76 | 8 | p14~p17で電圧、周波数を10V/Hzずつ変更するようにした。 |
| Tetsuki | 0:26508adf6f76 | 9 | 電圧周波数の初期値は570V/100Hz |
| Tetsuki | 0:26508adf6f76 | 10 | |
| Tetsuki | 0:26508adf6f76 | 11 | 2ボタン同時押しでリセットされるようにしたがうまく動作しなかったためその部分は変更が必要。 |
| Tetsuki | 0:26508adf6f76 | 12 | |
| Tetsuki | 0:26508adf6f76 | 13 | ***************************/ |
| Tetsuki | 0:26508adf6f76 | 14 | #include "mbed.h" |
| Tetsuki | 0:26508adf6f76 | 15 | #include <stdio.h> |
| Tetsuki | 0:26508adf6f76 | 16 | #include <stdlib.h> |
| Tetsuki | 0:26508adf6f76 | 17 | |
| Tetsuki | 0:26508adf6f76 | 18 | AnalogOut signal(p18);//AnalogOutピン(1768は18番ピン) |
| Tetsuki | 0:26508adf6f76 | 19 | Timer timer;//カウンタ |
| Tetsuki | 0:26508adf6f76 | 20 | Timer chtimer;//チャタリング用タイマー |
| Tetsuki | 0:26508adf6f76 | 21 | int Freq = 100;//正弦波の周波数 |
| Tetsuki | 0:26508adf6f76 | 22 | int Volt = 570;//印加電圧値 |
| Tetsuki | 0:26508adf6f76 | 23 | |
| Tetsuki | 0:26508adf6f76 | 24 | //スイッチ用ピンの宣言 |
| Tetsuki | 0:26508adf6f76 | 25 | DigitalIn VoltUp(p14); |
| Tetsuki | 0:26508adf6f76 | 26 | DigitalIn VoltDown(p15); |
| Tetsuki | 0:26508adf6f76 | 27 | DigitalIn FreqUp(p16); |
| Tetsuki | 0:26508adf6f76 | 28 | DigitalIn FreqDown(p17); |
| Tetsuki | 0:26508adf6f76 | 29 | |
| Tetsuki | 0:26508adf6f76 | 30 | int swflag = 0;//スイッチ用フラグ |
| Tetsuki | 0:26508adf6f76 | 31 | |
| Tetsuki | 0:26508adf6f76 | 32 | #define MIN_TIME_DIFF 200//チャタリング用待機時間 |
| Tetsuki | 0:26508adf6f76 | 33 | |
| Tetsuki | 0:26508adf6f76 | 34 | //LEDの宣言 |
| Tetsuki | 0:26508adf6f76 | 35 | DigitalOut led1(LED1); |
| Tetsuki | 0:26508adf6f76 | 36 | DigitalOut led2(LED2); |
| Tetsuki | 0:26508adf6f76 | 37 | DigitalOut led3(LED3); |
| Tetsuki | 0:26508adf6f76 | 38 | DigitalOut led4(LED4); |
| Tetsuki | 0:26508adf6f76 | 39 | |
| Tetsuki | 0:26508adf6f76 | 40 | |
| Tetsuki | 0:26508adf6f76 | 41 | int main() { |
| Tetsuki | 0:26508adf6f76 | 42 | double t=0.0; |
| Tetsuki | 0:26508adf6f76 | 43 | int timediff = 0; |
| Tetsuki | 0:26508adf6f76 | 44 | timer.start(); |
| Tetsuki | 0:26508adf6f76 | 45 | chtimer.start(); |
| Tetsuki | 0:26508adf6f76 | 46 | while(1) { |
| Tetsuki | 0:26508adf6f76 | 47 | if(VoltUp.read() == 1){//黄押すと電圧10V増加 |
| Tetsuki | 0:26508adf6f76 | 48 | timediff = chtimer.read_ms(); |
| Tetsuki | 0:26508adf6f76 | 49 | if(timediff > MIN_TIME_DIFF) { |
| Tetsuki | 0:26508adf6f76 | 50 | Volt = Volt + 10; |
| Tetsuki | 0:26508adf6f76 | 51 | if(Volt > 570){ |
| Tetsuki | 0:26508adf6f76 | 52 | Volt = 570; |
| Tetsuki | 0:26508adf6f76 | 53 | } |
| Tetsuki | 0:26508adf6f76 | 54 | } |
| Tetsuki | 0:26508adf6f76 | 55 | chtimer.reset(); |
| Tetsuki | 0:26508adf6f76 | 56 | led1 = 1; |
| Tetsuki | 0:26508adf6f76 | 57 | led2 = 0; |
| Tetsuki | 0:26508adf6f76 | 58 | led3 = 0; |
| Tetsuki | 0:26508adf6f76 | 59 | led4 = 0; |
| Tetsuki | 0:26508adf6f76 | 60 | wait(0.5); |
| Tetsuki | 0:26508adf6f76 | 61 | } |
| Tetsuki | 0:26508adf6f76 | 62 | if(VoltDown.read() == 1){//青押すと周波数10Hz減少 |
| Tetsuki | 0:26508adf6f76 | 63 | timediff = chtimer.read_ms(); |
| Tetsuki | 0:26508adf6f76 | 64 | if(timediff > MIN_TIME_DIFF) { |
| Tetsuki | 0:26508adf6f76 | 65 | Volt = Volt - 10; |
| Tetsuki | 0:26508adf6f76 | 66 | if(Volt < 0){ |
| Tetsuki | 0:26508adf6f76 | 67 | Volt = 0; |
| Tetsuki | 0:26508adf6f76 | 68 | } |
| Tetsuki | 0:26508adf6f76 | 69 | } |
| Tetsuki | 0:26508adf6f76 | 70 | chtimer.reset(); |
| Tetsuki | 0:26508adf6f76 | 71 | led1 = 0; |
| Tetsuki | 0:26508adf6f76 | 72 | led2 = 1; |
| Tetsuki | 0:26508adf6f76 | 73 | led3 = 0; |
| Tetsuki | 0:26508adf6f76 | 74 | led4 = 0; |
| Tetsuki | 0:26508adf6f76 | 75 | wait(0.5); |
| Tetsuki | 0:26508adf6f76 | 76 | } |
| Tetsuki | 0:26508adf6f76 | 77 | if(FreqUp.read() == 1){//白押すと周波数10Hz増加 |
| Tetsuki | 0:26508adf6f76 | 78 | timediff = chtimer.read_ms(); |
| Tetsuki | 0:26508adf6f76 | 79 | if(timediff > MIN_TIME_DIFF) { |
| Tetsuki | 0:26508adf6f76 | 80 | Freq = Freq + 10; |
| Tetsuki | 0:26508adf6f76 | 81 | } |
| Tetsuki | 0:26508adf6f76 | 82 | chtimer.reset(); |
| Tetsuki | 0:26508adf6f76 | 83 | led1 = 0; |
| Tetsuki | 0:26508adf6f76 | 84 | led2 = 0; |
| Tetsuki | 0:26508adf6f76 | 85 | led3 = 1; |
| Tetsuki | 0:26508adf6f76 | 86 | led4 = 0; |
| Tetsuki | 0:26508adf6f76 | 87 | wait(0.5); |
| Tetsuki | 0:26508adf6f76 | 88 | } |
| Tetsuki | 0:26508adf6f76 | 89 | if(FreqDown.read() == 1){//黒押すと周波数10Hz減少 |
| Tetsuki | 0:26508adf6f76 | 90 | timediff = chtimer.read_ms(); |
| Tetsuki | 0:26508adf6f76 | 91 | if(timediff > MIN_TIME_DIFF) { |
| Tetsuki | 0:26508adf6f76 | 92 | Freq = Freq - 10; |
| Tetsuki | 0:26508adf6f76 | 93 | if(Freq < 0){ |
| Tetsuki | 0:26508adf6f76 | 94 | Freq = 0; |
| Tetsuki | 0:26508adf6f76 | 95 | } |
| Tetsuki | 0:26508adf6f76 | 96 | } |
| Tetsuki | 0:26508adf6f76 | 97 | chtimer.reset(); |
| Tetsuki | 0:26508adf6f76 | 98 | led1 = 0; |
| Tetsuki | 0:26508adf6f76 | 99 | led2 = 0; |
| Tetsuki | 0:26508adf6f76 | 100 | led3 = 0; |
| Tetsuki | 0:26508adf6f76 | 101 | led4 = 1; |
| Tetsuki | 0:26508adf6f76 | 102 | wait(0.5); |
| Tetsuki | 0:26508adf6f76 | 103 | } |
| Tetsuki | 0:26508adf6f76 | 104 | if(VoltUp.read() == 1 && VoltDown.read() == 1){//黄,青同時押しで電圧を570Vにリセット |
| Tetsuki | 0:26508adf6f76 | 105 | timediff = chtimer.read_ms(); |
| Tetsuki | 0:26508adf6f76 | 106 | if(timediff > MIN_TIME_DIFF) { |
| Tetsuki | 0:26508adf6f76 | 107 | Volt = 570; |
| Tetsuki | 0:26508adf6f76 | 108 | } |
| Tetsuki | 0:26508adf6f76 | 109 | chtimer.reset(); |
| Tetsuki | 0:26508adf6f76 | 110 | led1 = 1; |
| Tetsuki | 0:26508adf6f76 | 111 | led2 = 1; |
| Tetsuki | 0:26508adf6f76 | 112 | led3 = 0; |
| Tetsuki | 0:26508adf6f76 | 113 | led4 = 0; |
| Tetsuki | 0:26508adf6f76 | 114 | wait(0.5); |
| Tetsuki | 0:26508adf6f76 | 115 | } |
| Tetsuki | 0:26508adf6f76 | 116 | if(FreqUp.read() == 1 && FreqDown.read() == 1){//白,黒同時押しで周波数を100Hzにリセット |
| Tetsuki | 0:26508adf6f76 | 117 | timediff = chtimer.read_ms(); |
| Tetsuki | 0:26508adf6f76 | 118 | if(timediff > MIN_TIME_DIFF) { |
| Tetsuki | 0:26508adf6f76 | 119 | Freq = 100; |
| Tetsuki | 0:26508adf6f76 | 120 | } |
| Tetsuki | 0:26508adf6f76 | 121 | chtimer.reset(); |
| Tetsuki | 0:26508adf6f76 | 122 | led1 = 0; |
| Tetsuki | 0:26508adf6f76 | 123 | led2 = 0; |
| Tetsuki | 0:26508adf6f76 | 124 | led3 = 1; |
| Tetsuki | 0:26508adf6f76 | 125 | led4 = 1; |
| Tetsuki | 0:26508adf6f76 | 126 | wait(0.5); |
| Tetsuki | 0:26508adf6f76 | 127 | } |
| Tetsuki | 0:26508adf6f76 | 128 | //sin波の出力※0~1の値をp18に送るため570で割る |
| Tetsuki | 0:26508adf6f76 | 129 | t = (double)timer.read_us() * 0.000001; |
| Tetsuki | 0:26508adf6f76 | 130 | signal = ((0.5 + sin(2.0 * 3.1415926 * Freq * t)/2) * Volt) / 570; |
| Tetsuki | 0:26508adf6f76 | 131 | led1 = 1; |
| Tetsuki | 0:26508adf6f76 | 132 | led2 = 1; |
| Tetsuki | 0:26508adf6f76 | 133 | led3 = 1; |
| Tetsuki | 0:26508adf6f76 | 134 | led4 = 1; |
| Tetsuki | 0:26508adf6f76 | 135 | } |
| Tetsuki | 0:26508adf6f76 | 136 | } |